package com.sicilin.dao;

import com.sicilin.object.dto.ObjectDTO;
import com.sicilin.po.TCObject;
import org.apache.ibatis.annotations.Param;

import java.util.Collection;
import java.util.List;

public interface ObjectDao {
    /**
     * 保存Object对象
     * @param object
     * @return
     */
    int saveTCObject(TCObject object);

    /**
     * 查找objectCode是否存在
     * @param objectCode
     * @return
     */
    int existObjectCode(@Param("objectCode")String objectCode,@Param("companyId") int companyId);

    /**
     * 查询某个父级下的所有一级子项的当前位置
     * @param parentId
     * @return
     */
    String findCurrentPositionByParentId(@Param("parentId")int parentId);

    /**
     * 通过id来或者TCObject对象
     * @param id
     * @return
     */
    TCObject getTCObjectbyId(@Param("objectId")int id);

    /**
     * 更新hasChildren
     * @param id
     * @return
     */
    int updateTCObjectHasChildren(@Param("objectId")int id, @Param("hasChildren")int hasChildren);

    /**
     * 用于异步树形的查找方法
     * @param parentId
     * @param start
     * @param size
     * @return
     */
    List<TCObject> findByAsyncTree(@Param("parentId") int parentId, @Param("start") int start, @Param("size") int size);

    /**
     * 查找异步树形的所有数据条数
     * @param parentId
     * @return
     */
    int countFindByAsyncTree(@Param("parentId") int parentId);

    /**
     * 查找所有类别
     * @param searchText
     * @return
     */
    List<TCObject> searchObjectType(@Param("searchText") String searchText);

    /**
     * 更新整个对象，以ID的为依据更改 <br>
     * 更改 objectCode,objectName,state
     * @param object
     * @return
     */
    int updateObject(TCObject object);


    List<ObjectDTO> searchObjectTreeWidthCompanyId(@Param("searchText") String searchText, @Param("totalCodes") Collection<String> totalCodes, @Param("companyId") int companyId);

    List<ObjectDTO> searchObjectTreeByParentIdWidthCompanyId(@Param("parentId") int parentId,@Param("companyId") int companyId);

    List<TCObject> findObejctByCodesWidthCompanyId(@Param("objectCodes") Collection<String> objectCodes,@Param("companyId") int companyId);
}
